package com.bdgj.action;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.druid.util.MySqlUtils;
import com.bdgj.bean.OpInfoBean;
import com.bdgj.bean.OpInfoBeanQuery;
import com.bdgj.bean.UserInfoBean;
import com.bdgj.service.OpInfoService;
import com.bdgj.service.UserInfoService;
import com.bdgj.utils.MyUtil;

/**
 * @author Lvrumeng 控制层的响应类：通过注解@Controller说明这是一个控制层的类
 */
@Controller
public class OpInfoAction {

	// spring依赖注入service层对象
	@Resource
	private OpInfoService opS;

	@Resource
	private HttpServletRequest request;
	
	
	/**
	 * 登录操作
	 * 
	 * @param opB
	 * @return
	 */
	@RequestMapping("/doOpLogin")
	public String doOpLogin(OpInfoBean opB, UserInfoBean userB) {
		// 默认跳转页面
		String str = "../../login";
		// 调用service层方法
		List<OpInfoBean> oplst = opS.selectOpInfoLogin(opB);
		OpInfoBean opbean = oplst.get(0);
		request.getSession().setAttribute("opbean", opbean);
		// 判断查询结果集是否为空
		if (oplst != null && oplst.size() > 0) {
			// 判断操作员权限
			// 如果权限是1
			if (oplst.get(0).getOpPower() == 1) {
				// 跳转到管理员页面
				str = "main/adminmain";
				// 如果权限为0
			} else if (oplst.get(0).getOpPower() == 0) {
				// 跳转到普通操作员页面
				str = "main/opmain";
			}
		}
		return str;
	}

	@RequestMapping("/doAddOp")
	public String doAddOp(@RequestParam("opHeadfile") MultipartFile uploadFile, OpInfoBean opB) {
		// 获取文件原始名字
		String imgOldNmae = uploadFile.getOriginalFilename();
		// 输出文件原始名字
		System.out.println("源文件名：" + imgOldNmae);
		// 1.在web服务器上创建保存该文件的目录文件夹
		// 获取服务器的路径
		String strContentPath = request.getSession().getServletContext().getRealPath("/");
		// 保存上传文件的路径,如果进行静态资源过滤，该路径需要进行静态资源解析
		String strRelativePath = "static/uploadfile/opheads/";
		// 创建文件上传的目录
		File fileDiretory = new File(strContentPath + strRelativePath);
		// 判断目录是否存在
		if (fileDiretory != null && fileDiretory.exists()) {
		} else {
			// 如果不存在创建
			fileDiretory.mkdirs();
		}
		// 2.上传文件流
		// 提取文件后缀
		String strFileType = imgOldNmae.substring(imgOldNmae.lastIndexOf("."));
		// 拼接新的文件名
		String strNewName = "opImg_" + UUID.randomUUID() + strFileType;
		try {
			uploadFile.transferTo(new File(strContentPath + strRelativePath + strNewName));
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 3.将文件的路径赋值给实体bean的文件成员变量，通过实体bean将路径保存到数据库中
		opB.setOpHead(strRelativePath + strNewName);
		// 调用service层的方法添加数据到数据库
		opS.doAddOrUpdateOpInfo(opB);
		return "op/doSelectOp";
	}

	/**
	 * 根据条件查询操作员信息
	 * 
	 * @param opB
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/doSelectOp")
	public List<OpInfoBean> doSelectOp(OpInfoBean opB) {
		List<OpInfoBean> oplst = opS.selectOpInfoBypara(opB);
		return oplst;

	}

	/**
	 * 查询出要修改的原信息
	 * 
	 * @param opId
	 * @return 查询结果
	 */
	@RequestMapping("/doSelectMmodifyOpInfo")
	public String doSelectMmodifyOpInfo(String opId) {
		//调用service层方法查询
		OpInfoBean opB = opS.selectByPrimaryKey(MyUtil.coverStr2Integer(opId));
		//将信息存入session域中
		request.getSession().setAttribute("opB", opB);
		return "op/modifyOp";
	}

	/**
	 * 修改信息
	 * @param opB
	 * @return 修改后的结果
	 */
	@RequestMapping("/doUpdateOpInfo")
	public String doUpdateOpInfo(OpInfoBean opB) {
		//调用service层的方法修改信息
		opS.updateByPrimaryKeySelective(opB);
		return "op/doSelectOp";
	}
	/**
	 * 删除操作员信息
	 * @param opId
	 * @return
	 */
	@RequestMapping("/doDeleteOpInfo")
	public String doDeleteOpInfo(String opId) {
		opS.deleteByPrimaryKey(MyUtil.coverStr2Integer(opId));
		return "op/doSelectOp";
	}
}
